Skip to main content

Prétraitement de fichiers G-Code volumineux

Le CNC15_LargeGCode.project un exemple de projet se trouve dans le répertoire d'installation de CODESYS sous ..\CODESYS SoftMotion\Examples.

L'exemple de projet montre comment traiter des fichiers de code G volumineux. Étant donné que les fichiers très volumineux sont particulièrement courants en sortie de systèmes CAD/CAM, ce cas est illustré à titre d'exemple

systèmes CAD/CAM génèrent souvent des fichiers de code G de plusieurs centaines de milliers de lignes. Il s'agit de segments linéaires très courts (G1), généralement de l'ordre de 100 micromètres à un millimètre. Ces courts segments linéaires tracent le contour de la pièce. Ils ne forment pas un chemin fluide. La tangente saute généralement entre les segments linéaires

L'exemple montre comment lire ces fichiers volumineux de manière efficace avec des besoins de mémoire constants et comment obtenir une courbe de vitesse lisse sur une trajectoire composée de nombreux segments linéaires courts. Le contour d'origine de la pièce est reconstruit lors du prétraitement du code G.

Structure de la demande

La structure est typique des applications CNC. Le code G est lu dans la tâche d'arrière-planPathTask), et le prétraitement des chemins a également lieu ici. L'interpolation est effectuée dans la tâche du busMainTask).

Lecture de fichiers volumineux

Afin de réduire la latence au début du traitement du code G, une boucle est utilisée dans la tâche d'arrière-plan. Par souci de simplicité, un compteur est utilisé pour la condition d'interruption. En fonction de l'application, du code G et des performances de l'automate, d'autres conditions d'interruption, telles qu'un minuteur, peuvent être utiles. La boucle se terminera avant d'atteindre cette condition d'abandon lorsque la file d'attente des chemins est pleine

// Set this value depending on your other tasks, PLC performance, and G-Code
counter := 25;

WHILE counter > 0 AND
      (poqDataOut = 0 OR_ELSE (NOT poqDataOut^.bFull AND NOT poqDataOut^.bEndOfList))
DO
     <Read G-Code and process it>

     counter := counter - 1;
END_WHILE

Au moyen de canalisations dans le prétraitement, même les très gros fichiers de code G peuvent être lus avec des besoins de mémoire faibles et constants. Les tailles de file d'attente sont choisies de manière à être suffisamment grandes pour permettre aux blocs fonctionnels respectifs de prévoir suffisamment.

La file d'attente de sortie de SMC_NCInterpreter est également la file d'attente d'entrée de SMC_SmoothMerge. Au total, 128+3 éléments sont réservés à la file d'attente de sortie. 3 est une réserve du SMC_OutQueue et 128 restent à utiliser comme prévisions pour SMC_SmoothMerge. SMC_SmoothMerge combine un maximum de 128 segments linéaires courts en une seule spline.

La file d'attente de sortie de SMC_SmoothMerge est également la file d'attente d'entrée de SMC_SmoothPath. SMC_SmoothPath nécessite au moins 2 éléments, plus une réserve de 3 éléments, comme prévision. Si les fonctions M sont situées entre deux éléments lissés, d'autres éléments sont nécessaires en fonction du nombre de

La file d'attente de sortie de SMC_SmoothMerge est également la file d'attente d'entrée de SMC_Interpolator. Une prévision de 100 éléments convient à la plupart des applications. Pour plus d'informations, consultez les rubriques suivantes : Prétraitement des chemins et tailles des files d'attente.

/// Buffer of the interpreter, lookahead for SMC_SmoothMerge
aBufIp : ARRAY[0..130] OF SMC_GeoInfo;
/// Buffer of SMC_SmoothMerge
aBufSmm : ARRAY[0..15] OF SMC_GeoInfo;
/// Buffer of SMC_SmoothPath, lookahead for SMC_Interpolator
aBufSmp : ARRAY[0..99] OF SMC_GeoInfo;

Prétraitement de segments linéaires

Le SMC_SmoothMerge Le bloc fonctionnel assure une courbe de vitesse régulière sur les nombreux segments linéaires très courts. Il combine autant de segments linéaires consécutifs que possible en une seule spline, tout en maintenant les tolérances spécifiées. Dans cet exemple, un écart maximal de 0,1 mm en X et Y est autorisé (PARAMETERS.piMaxDifference).

. Les figures montrent le traitement étape par étape :
  1. Lecture des segments linéaires courts

    _sm_img_example_long_g_code1.png
  2. Combiner plusieurs segments linéaires en splines à l'aide de SMC_SmoothMerge.

    _sm_img_example_long_g_code2.png
  3. Lissage entre les cannelures avec SMC_SmoothPath car, comme on l'a vu plus haut, les splines ne se connectent pas tangentiellement les unes aux autres.

    _sm_img_example_long_g_code3.png

Mise en service

  1. Créez l'application et téléchargez-la sur une manette.

  2. Ouvrez la trace et téléchargez-la sur le contrôleur.

  3. Démarrez l'application.

  4. Vous pouvez suivre le traitement du code G.